Redis 哈希(Hash)

Redis 中的数据类型主要分为 字符串、哈希、列表、集合、有序集合、HyperLogLog、地理信息、Stream 等类型,字符串类型在上一章我们就已经介绍过,他通过 SET 就可以直接进行创建,而其他的数据类型则是需要通过其他的命令以及其下属配合的命令来完成操作。

哈希是一个 string 类型的 字段(field) 以及值(value)映射表,可适用与存储对象,单个哈希键值可存储多大40亿字段值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> HMSET hash_value name "kun" info "hello,world" url "http://jiangxue.org.cn" and "one" or "two" age "17" redis "redislabs.com"
OK
127.0.0.1:6379> HGETALL hash_value
1) "name"
2) "kun"
3) "info"
4) "hello,world"
5) "url"
6) "http://jiangxue.org.cn"
7) "and"
8) "one"
9) "or"
10) "two"
11) "age"
12) "17"
13) "redis"
14) "redislabs.com"

需要注意的是 Hashes 类型的字段依然是通过键值来进行存储的,如 name=kun、info=hello,world

可以通过使用 HMSET 来创建 hash 类型的键值对,也可以使用 HGETALL 来获取所有的字段值,当然也可以指定键名的方式来进行获取 HGETALL hash_value "name"

Id Name Info Command
1 HMSET 创建 hash 类型的键值段 HMSET hash_value name "kun" info "hello,world" url "http://jiangxue.org.cn"
2 HMGET 获取指定字段的值 HMGET hash_value name
2 HGET 获取存储在哈希表中指定的字段值 HGET hash_value "name"
3 HSET 自 redis 4.0 起可以一次性设置多个字段对,HMSET 区别是可以覆盖字段值 HSET hash_value age "10"
4 HSETNX 为哈希表中不存在的字段赋值(如存在返回 0) HSETNX hash_value about "jiangxue"
5 HGETALL 获取全部或单个的 hash 类型键值段 HGETALL hash_value or HGET hash_value "name"
6 HEXISTS 查看哈希表中的 key 是否存在(存在返回 1,否则返回0) HEXISTS hash_value "name"
7 HKEYS 获取当前所有哈希表中的字段 HKEYS hash_value
8 HVALS 获取当前所有哈希表中的字段值 HVALS hash_value
9 HLEN 获取哈希表中字段的数量(从1开始) HLEN hash_value
10 HDEL 删除一个多多个哈希表中的键值对 HDEL hash_value "and" "or"
11 HINCRBY 为指定的哈希表中的 key 增加或减少数值(整数) HINCRBY hash_value age 1 (原本 17将会被增加1,得出 18)
12 HINCRBYFLOAT HINCRBY 的区别是支持非整数计算以及科学计数法 HINCRBYFLOAT hash_value age -1.5 (18-1.5 得出 16.5)
13 HSCAN 模糊搜索哈希表中的字段,并返回键值段 HSCAN hash_value 0 match "na*" (返回 name 字段即值)
14 HSTRLEN 返回字段值的长度 HSTRLEN hash_value "name"

本文使用《江雪分析公开知识存储库知识共享许可证》进行发布